import math
from prettytable import PrettyTable
import matplotlib.pyplot as plt
from scipy.stats import t
import numpy as np
# Параметры распределения
degrees_of_freedom = 3
percentiles = [0.25, 0.50, 0.75]


# Функция для вычисления квантиля
def calculate_t_quantile(p, df):
    # Используем метод обратного преобразования функции распределения
    if p <= 0 or p >= 1:
        raise ValueError("Вероятность должна быть в пределах от 0 до 1 (исключая края)")

    q = np.inf
    for x in np.linspace(-3, 3, 1000):
        if t.cdf(x, df) >= p:
            q = x
            break

    return q


# Создаем таблицу
table = PrettyTable()
table.field_names = ["Percentile", "Quantile"]

# Вычисляем квантили
quantiles = [calculate_t_quantile(p, degrees_of_freedom) for p in percentiles]

# Заполняем таблицу
for p, q in zip(percentiles, quantiles):
    table.add_row([f"{p * 100}%", round(q,2)])
# Выводим таблицу
print(table)

# Создаем таблицу
table = PrettyTable()
table.field_names = ["Percentile", "Quantile"]

# Вычисляем квантили с использованием библиотеки scipy.stats.t.ppf
quantiles = [t.ppf(p, degrees_of_freedom) for p in percentiles]

# Заполняем таблицу
for p, q in zip(percentiles, quantiles):
    table.add_row([f"{p * 100}%", f"{q:.2}"])

# Выводим таблицу
print(table)

